package filter

import (
	"go.mongodb.org/mongo-driver/bson"
	"time"
)

// SortInput 过滤参数
type SortInput struct {
	// 字段
	Field string `json:"field"`
	// 字段类型
	DataType DataType `json:"dataType"`
	// 拼接方式
	SpliceType SpliceType `json:"spliceType"`
	// 筛选类型
	FilterType FilterType `json:"filterType"`
	// 值
	Values []string `json:"values"`
	// 值？
	Value interface{} `json:"value,omitempty"`
	// 日期范围
	DateRange DateRange `json:"dateRange,omitempty"`
	// 日期范围类型
	DateRangeType DateRangeType `json:"dateRangeType,omitempty"`
	// 最小值
	MinValue string `json:"minValue,omitempty"`
	// 最大值
	MaxValue string `json:"maxValue,omitempty"`
	// 是否升序
	IsAsc bool `json:"isAsc,omitempty"`
	// 筛选动态值
	DynamicSource []interface{} `json:"dynamicSource,omitempty"`
}

func (f SortInput) ResolveFilterParam() bson.M {
	return f.FilterType.GetFilterExpression(f)
}

func (f SortInput) GetDateRange() (begin, end time.Time) {
	return f.DateRange.GetDate(f)
}

type Filters []SortInput

func (f Filters) ResolveFilterParam() bson.M {
	var spliceType string
	result := bson.M{}
	arr := bson.A{}

	for _, sortInput := range f {
		// 连接类型
		if spliceType == "" {
			spliceType = sortInput.SpliceType.GetFilterExpression()
		}
		arr = append(arr, sortInput.ResolveFilterParam())
	}
	if spliceType != "" {
		result[spliceType] = arr
	}
	return result
}
